package com.zsy.leetcode;

import java.util.LinkedList;
import java.util.Queue;

/**
 * 写一个 RecentCounter 类来计算特定时间范围内最近的请求。
 * <p>
 * 请你实现 RecentCounter 类：
 * <p>
 * RecentCounter() 初始化计数器，请求数为 0 。
 * int ping(int t) 在时间 t 添加一个新请求，其中 t 表示以毫秒为单位的某个时间，并返回过去 3000 毫秒内发生的所有请求数（包括新请求）。确切地说，返回在 [t-3000, t] 内发生的请求数。
 * 保证 每次对 ping 的调用都使用比之前更大的 t 值。
 *
 * @author zhangshuaiyin
 * @date 2021-04-22 09:25
 */
public class _933_Number_of_Recent_Calls {

    public static void main(String[] args) {
        RecentCounter counter = new RecentCounter();
        System.out.println(counter.ping(642));
        System.out.println(counter.ping(1849));
        System.out.println(counter.ping(4921));
        System.out.println(counter.ping(5936));
        System.out.println(counter.ping(5957));
    }
}
class RecentCounter {
    Queue<Integer> queue;

    public RecentCounter() {
        queue = new LinkedList<>();
    }

    /**
     * 1. 将每次调用的时间 t 存入到队列
     * 2. 循环判断队列中的时间范围是否大于 3000
     * 3. 超出3000时执行出队操作，将之前入队元素剔除
     * 4. 然后返回队列长度就是特定范围内的请求数
     *
     * @param t
     * @return
     */
    public int ping(int t) {
        queue.add(t);
        while (queue.element() < t - 3000) queue.poll();
        return queue.size();
    }
    /*
     * 队列添加方法：add() offer()
     * 查看队头元素：element() peek()
     * 队列出队方法：poll() remove()
     *
     * */
}
